# class Student:
#     __age = 18
#
#     def __init__(self, name, age):
#         self.name = name
#         self.age = age
#         self.__score = 50  # 定义对象私有属性,外界不能随意修改
#
#     def setScore(self, score):  # 私有属性,外界不能随意修改,设置set函数调用修改
#         self.__score = score
#
#     def getScore(self):  # 私有属性,外界不能随意获取,设置get函数调用获取
#         return self.__score
#
#     def __str__(self):
#         return '姓名：{}，年龄：{}，分数：{}'.format(self.name, self.age, self.__score)
#
#
# x = Student('x', 18)
# x.setScore(99)  # 调用set函数修改私有属性
# print(x)  # 使用__str__方法输出
# print(x.getScore())  # 调用get函数获取私有属性
# # print(dir(Student))#查看类的私有属性
# # print(dir(x))#查看对象的私有属性
# # print(x.__dir__())#同上

#装饰器实现私有化
class Student:
    __age = 18

    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.__score = 50  # 定义对象私有属性,外界不能随意修改

    @property
    def score(self):  # 装饰器私有化后，可像普通属性一样获取私有属性
        return self.__score

    @score.setter#利用上个装饰器的方法
    def score(self,score):  # 可像普通属性一样改变
        self.__score=score

    def __str__(self):
        return '姓名：{}，年龄：{}，分数：{}'.format(self.name, self.age, self.__score)

s=Student('小明',20)
s.name='xiaoming'
print(s.score)#使用score函数就等于使用私有属性__score
s.score=100#实现私有属性像普通属性一样使用
print(s)